#this script must run on the radius and server-manager router

#first we create user profile on all router using/connecting to  the radius server

/ip hotspot user profile add name="STRAW" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="8k/8k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add name="WOOD" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="16k/16k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add name="STONE" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="16k/24k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add  name="SILVER" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/32k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add  name="BRONZE" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/48k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add  name="GOLD" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/56k" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add  name="PLATINUM" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="32k/64k 64k/256k 48k/196k 5/5" transparent-proxy=yes open-status-page=always advertise=no 
/ip hotspot user profile add  name="DIAMOND" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="32k/128k 64k/256k 48k/192k 5/5" transparent-proxy=yes open-status-page=always advertise=no 

# users created has a download limit of 300mb/mois

tool usermanager user set 0,1,2,3,4..  download-limit=314572800


#after copy this script to the router and schedule it to run  every time you want

#
#Jun/15/2009
# smtp.gmail.com   I have a gmail account


:local username
:local surname
:local usage
:local bytesin
:local bytesout
:local bytestotal
:local megstotal
:local cap
:local comment
:local newcomment
:local invoice
:local newinvoice
:local lastwarning
:local newwarning
:local percentage
:local percentile
:local warninglevel
:local warn
:local update
:local email
:local server
:local groupname
:local downloadlimit
:local newgroupname
:local month
:local newmonth
:local day
:local lastmonth
:local monthname

:set server [:resolve smtp.gmail.com]
:set day [:pick [/system clock get date] 4 6]
:set month [:pick [/system clock get date] 0 3]

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={ 
:set warn false ; :set update false ; :set warninglevel 00; :set percentile 0000 

:set username [get $i name]
:set surname [get $i last-name]
:set comment [get $i comment]
:set bytesin [get $i download-used]
:set bytesout [get $i upload-used]
:set bytestotal ($bytesin + $bytesout)
:set email [get $i email]
:set groupname [get $i group-name]
:set downloadlimit [get $i download-limit]

:set megstotal ($bytestotal / 1000000)

:set invoice ($comment)
:set newinvoice ($invoice.$i)
:set lastwarning [:pick $comment 5 7]
:set lastmonth [:pick $comment 2 5]
# si le mois change...
     :if ($month != $lastmonth) do={
         /tool user-manager user set $username group-name="GOLD" comment= "$day$month$("00")"
         /tool user-manager user reset-counters $username
       } else= { 
          :set cap (downloadlimit / (1024*1024))
          :set percentage (($megstotal * 100) / $cap)
          :if (([$percentage] >=75) &&  ([$percentage] < 80)) do={ :set percentile 7580; : set warninglevel 75 } 
          :if (([$percentage] >=80) && ([$percentage] < 85)) do={ :set percentile 8085; : set warninglevel 80 }
          :if (([$percentage] >=85) && ([$percentage] < 90)) do={ :set percentile 8590; : set warninglevel 85 }
          :if (([$percentage] >=90) && ([$percentage] < 95)) do={ :set percentile 9095; : set warninglevel 90 }
          :if ([$percentage] >=95 ) do={ :set percentile 9599; : set warninglevel 95 }
          :if ([$warninglevel] > $lastwarning) do={ :set warn true ; :set update true }
          :if ([$warninglevel] = $lastwarning) do={ :set warn false ; :set update false }
          :if ([$warninglevel] < $lastwarning) do={ :set warn false ; :set update true }
           
           :if ([$update] = true) do={ :set newwarning $warninglevel ;  :set newmonth $lastmonth } else={ :set newwarning $lastwarning  ; :set newmonth $lastmonth }
           :if ([$warn] = true) do={ 
           :log info " ********  warning = $warn for user $username : percentage= $percentage ***********" 
           :set newgroupname $groupname
           :if ([$warninglevel]=75) do={:set newgroupname "GOLD" }
           :if ([$warninglevel]=80) do={:set newgroupname "BRONZE" }
           :if ([$warninglevel]=85) do={:set newgroupname "SILVER" }
           :if ([$warninglevel]=90) do={:set newgroupname "STONE" }
           :if ([$warninglevel]=95) do={:set newgroupname "STRAW" } 
           /tool user-manager user set $username group-name= "$newgroupname" 
           :log info " $username downgrade to $newgroupname ........................" 
           /tool e-mail send to=$email from="wifi.mtamobile@gmail.com"  password="haiti2009" server=$server subject="Usage Warning: Usage at $percentage" body="Dear $username $surname

This message is to inform you of your current usage.
The current warning trigger is $warninglevel%.

You have downloaded $megstotal MB, which is $percentage%
of your $cap MB cap.

This is an Automatically generated E-mail
that is sent out when users reach 75%, 80%, 85%, 90% , 95% and 100% of their cap.

If any information contained in this E-mail is incorrect,
please inform us immediately.
If you have received this E-mail in error,
please reply to this E-mail stating that you are not the intended recipient,
and delete this message.

Thank You

Auto Billing & Accounting
MTA-Mobile.net
MikroTik Ayiti
wifi.mtamobile@gmail.com
9,Route de l'Aeroport rue des Nimes
Port-au-Prince, Haiti "
:log info "Sent Warning Level $warninglevel% to $email"  }
:set newcomment "$day$newmonth$newwarning"
/tool user-manager user set $username  comment="$newcomment"
        } }